ขั้นตอนวิธี Blowfish ของ โบลว์ฟิช

Blowfish จะเป็นการเข้ารหัสแบบ 64 Bit Block Cipher โดยข้อมูลในการเข้ารหัสจะถูกแบ่งออกเป็นบล็อก บล็อกละ 64 Bit และใช้คีย์แบบ Variable-Length Key โดยจะมีขนาดตั้งแต่ 32 Bit ไปจนถึง 448 Bit โดยขั้นตอนการทำงานนั้นจะมีการทำเป็นรอบทั้งหมด 16 รอบ ซึ่งเรียกว่าวิธีการแบบ Feistel Network และเลือกใช้คีย์ที่เหมาะสมกับ S-boxes ในการเข้ารหัส โดยจะมีโครงสร้างคล้ายกับการทำงานของขั้นตอนวิธี CAST-128 ที่เป็นแบบ Fixed S-boxes

ตาม Diagram ทางซ้ายมือนั้นจะเป็นการแสดงการทำงานของขั้นตอนวิธี Blowfish ซึ่ง 1 เส้นจะแทนด้วยข้อมูลขนาด 32 Bit ที่เรียกว่า P-entries โดย ขั้นตอนวิธี ในการเลือก Key หรือ Subkey นั้นจะประกอบด้วย 2 ส่วนคือ 18-entry P-array และ 4 ของ 256-entry S-boxes โดยที่ S-boxes นั้นจะเป็นการรับข้อมูลเข้า (Input) ขนาด 8 Bit เข้าไปเพื่อทำงานในกระบวนการต่าง ๆ และจะให้ข้อมูลขนาด 32 Bit ออกมา (Output) โดยในแต่ละ P-array จะนำมาใช้ในแต่ระรอบตั้งแต่ P1 จนถึง P16 และหลังจากที่มีการเสร็จสิ้นการทำงาน 16 รอบ แล้วในแต่ละ 32 Bit ของ Data Block จะถูกทำการ XORed (Exclusive OR) กับ P-array อีก 2 ตัว คือ P17 และ P18

ตาม Diagram ทางขวามือจะเป็นการแสดงการทำงานภายในของฟังก์ชัน F (F-function) ซึ่งปรากฏอยู่จาก Diagram ด้านบน โดยการทำงานของฟังก์ชัน F นั้นจะเริ่มต้นโดยจะแบ่งข้อมูลขนาด 32 Bit เป็น 4 ส่วน ส่วนละ 8 Bit เพื่อเป็น Input ในการเข้าไปทำงานของ 4 S-boxes ที่อยู่ภายในฟังก์ชัน F นั้น และเมื่อทำการผ่าน S-box ไปแล้วจะได้ Output ออกมาเป็นข้อมูลที่มีขนาด 32 Bit ในทุก ๆ S-box โดยจะนำมาทำการบวก แล้วหารเอาเศษด้วย 232 และการ XOR จนได้ข้อมูลสุดท้ายที่มีขนาด 32 Bit เช่นเดิม

ตารางคีย์ของขั้นตอนวิธี Blowfish จะเริ่มทำการกำหนดค่าเป็น Subkey ที่เรียกว่า P-array และ S-box ซึ่งประกอบไปด้วยค่าของตัวเลขฐานสิบหกของค่า Pi ซึ่งเป็นค่าที่ไม่เป็นระเบียบและยากต่อการจัดเรียง โดยที่คีย์ลับนี้จะทำการ XORed กับ P-entries หรือข้อมูลที่เป็น 32 bit ทางซ้ายมือในทุก ๆ รอบตั้งแต่ P1 จนถึง P16 และในทุก ๆ รอบจะมีการ Generate Subkey ขึ้นมาใหม่ทุกครั้ง เมื่อทำการ XORed ในรอบนั้น ๆ แล้วก็จะเข้าสู่การทำงานในฟังก์ชัน F ซึ่งประกอบไปด้วย 4 S-box จากนั้นก็จะทำการ XORed อีกครั้งกับ P-entries หรือ Data Block ที่มีขนาด 32 Bit ที่อยู่ทางฝั่งขวามือ จากนั้นจะมีการสลับข้อมูลโดยที่ 32 Bit P-entries ทางขวามือจะถูกสลับไปทางซ้ายมือ และ 32 Bit P-entries ทางซ้ายมือจะถึงสลับไปทางขวามือ ก็เป็นการสิ้นสุดการทำงานในแต่ละรอบ โดยจะทำงานแบบนี้ไปเรื่อย ๆ จนครบ 16 รอบ และเมื่อครบ 16 รอบแล้วก็จะทำการ XORed อีกครั้งกับ P-array ตัวที่ 17 และ 18 ซึ่งเป็น Subkey 2 ตัวสุดท้าย ก็จะสิ้นสุดขั้นตอนการเข้ารหัส และจะมีขั้นตอนการรวมกันของ 32 Bit Block Cipher ทั้ง 2 ฝั่งเข้าด้วยกันเป็น Cipher text ขนาด 64 Bit เช่นเดิม ซึ่งการเข้ารหัสแบบ Blowfish นี้จะมีการทำงาน (Run) ทั้งหมด 521 ครั้งเพื่อทำการ Generate ค่าของทุก ๆ Subkey ที่เกิดขึ้น ซึ่งจะใช้เนื้อของ CPU ที่มีขนาดเป็น 4 KB ในการ Process เท่านั้นซึ่งถือว่าน้อยมาก